<?php
namespace common\models;

class Patterns
{
    const PHONE = '';

    /**
     * 验证字符串是否只含数字与英文，字符串长度并在n~m个字符之间
     * @param int $minLength  最小长度
     * @param int $maxLength  最大长度
     *
     * @return string
     */
    public static function strNumberLetter($minLength = 4, $maxLength = 16) {
        return "/^[a-zA-Z0-9]{" . $minLength . "," . $maxLength. "}$/";
    }
    /**
     * 密码长度至少 6 位，必须包含有大写字母、小写字母、数字
     * @param int $minLength  最小长度
     * @param int $maxLength  最大长度
     *
     * @return string
     */
    public static function passwordMatch($minLength = 5, $maxLength = 18) {
        return "/(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?!.*\s).{{$minLength},{$maxLength}}/";
    }

    public static function bankCardNo() {
        return "/^([1-9]{1})(\d{15,18})$/";
    }
    /**
     * 匹配中文
     * @return string
     */
    public static function chineseMatch() {
        return '[\u4e00-\u9fa5]';
    }

    /**
     * 匹配账号-只能是字母开头，长度n~m之间，允许字母数字下划线
     * @param int $minLength
     * @param int $maxLength
     *
     * @return string
     */
    public static function matchStrNumberLetterOnderline($minLength = 5, $maxLength = 16){
        return '/^[a-zA-Z][a-zA-Z0-9_]{'. $minLength .',' .$maxLength. '}$/';
    }

    /**
     * 匹配邮政编码
     * @return string
     */
    public static function matchPostCode() {
        return '/^[1-9]\d{5}(?!\d)$/';
    }

    /**
     * 匹配邮箱
     * @return string
     */
    public static function matchEmail() {
        return '/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/';
    }

    public static function emailV2() {
        return '/^[A-Za-zd]+([-_.][A-Za-zd]+)*@([A-Za-zd]+[-.])+[A-Za-zd]{2,5}$/';
    }

    /**
     * 匹配年-月-日
     * @return string
     */
    public static function matchDate1() {
        return '/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/';
    }

    /**
     * 匹配年/月/日
     * @return string
     */
    public static function matchDate2() {
        return '/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/';
    }

    /**
     * 匹配国内座机号
     * @return string
     */
    public static function matchTelephone() {
        return '/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/';
    }

    /**
     * 日期时间格式判定
     * @return string
     */
    public static function datetimePattern() {
        return '/^\d{4}-\d{2}-\d{2}\s{1}[0-2]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}/';
    }

    /**
     * 手机号码格式判定
     * @return string
     */
    public static function phoneNumber() {
        return '/^((13[0-9])|(14[0-9])|(15([0-9]))|(16([0-9]))|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$/';
    }
    /**
     * 手机号码格式判定
     * @return string
     */
    public static function phoneNumberNotVir() {
        return '/^((13[0-9])|(14[0-9])|(15([0-9]))|(16([0134689]))|(17[2-9])|(18[0-9])|(19[0-9]))\\d{8}$/';
    }
    /**
     * 手机号码格式判定
     * @return string
     */
    public static function imtoken() {
        return '/^0x[\d\w\W]{40}$/';
    }

    /**
     * 身份证格式判定
     * @return string
     */
    public static function idCard() {
        return '/^\d{6}((1[89])|(2\d))\d{2}((0\d)|(1[0-2]))((3[01])|([0-2]\d))\d{3}(\d|X)$/i';
    }
}
